package com.mentalhealthplatform.teacherV2.service;

import com.mentalhealthplatform.appModels.Test;
import com.mentalhealthplatform.teacherV2.repository.TestRepositoryV2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.Set;

/**
 * TestServiceV2 类用于处理 Test 实体的业务逻辑，包括数据库和 Elasticsearch 的操作。
 */
@Service
public class TestServiceV2 {

    @Autowired
    private TestRepositoryV2 testRepository;

    /**
     * 查询所有 Test 实体。
     * @return 所有 Test 实体的列表
     */
    public List<Test> findAll() {
        return testRepository.findAll();
    }

    /**
     * 查询所有 Test 实体。
     * @return 所有 Test 实体的列表
     */
    public Optional<Test> findById(Integer id) {
        return testRepository.findById(id);
    }

    /**
     * 保存 Test 实体到数据库和 Elasticsearch。
     * @param test 要保存的 Test 实体
     * @return 保存后的 Test 实体
     */
    public Test save(Test test) {
        // 保存到数据库
        Test savedTest = testRepository.save(test);
        // 保存到 Elasticsearch
        //testElasticsearchV2.save(savedTest);
        return savedTest;
    }

    /**
     * 根据 ID 删除 Test 实体。
     * @param id 要删除的 Test 实体的 ID
     */
    public void deleteById(Integer id) {
        testRepository.deleteById(id);
        //testElasticsearchV2.deleteById(id);
    }

    /**
     * 根据主题关键字搜索 Test 实体。
     * @param keyword 主题关键字
     * @return 匹配的 Test 实体的列表
     */
    public List<Test> searchByTopic(String keyword) {
        return testRepository.findByTopicContaining(keyword);
    }

    /**
     * 根据类型集合查找 Test 实体。
     * @param types Test 实体类型的集合
     * @return 匹配的 Test 实体的列表
     */
    public List<Test> findByTypes(Set<Integer> types) {
        if (types == null || types.isEmpty()) {
            return findAll();
        }
        return testRepository.findByTypesIn(types);
    }

    /**
     * 在 Elasticsearch 中进行全局搜索。
     * @param query 搜索的关键字
     * @return 匹配的 Test 实体的列表
     */
    /*public List<Test> searchGlobally(String query) {
        return testElasticsearchV2.findByTopicContaining(query);
    }*/
}